//convert.h
//字符串转换
#pragma once
#include <string>
#ifdef WINDOWS
#include "windows.h"
#endif
#include <vector>
#include "../include/commondef.h"
using namespace std;

#define STRCVT_ERR_NOMEM	(CUSTOM_ERR-1)	//内存不足

#ifdef WINDOWS
class StringConvert
{//字符串转换。单个对象不支持多线程访问。
public:
	StringConvert(){Construct();};
	~StringConvert(){Destruct();};

	int Init(int iWstrBufLen);
	/*初始化。
	iWstrBufLen	WCHAR缓冲区的大小，单位WCHAR。这个值决定了GbkToUtf8能够转换的字符串的最大长度，单位字符。
	*/

	int Recycle(){Destruct();Construct();};

	int GbkToUtf8(
		IN const char *pcGbk,
		IN int iGbkLen,
		OUT char *pcUtf8,
		IN OUT int &iUtf8Len);
	/*将GBK编码的字符串转为UTF8编码。
	pcGbk	GBK编码的字符串
	iGbkLen	GBK编码的字符串的长度，单位字节。如果为-1则视为pszGbk以零结束。
	pcUtf8	输出UTF8编码的字符串
	iUtf8Len	pcUtf8的长度，单位字节。返回时变为结果的长度。

	说明：如果pcUtf8过小，返回COMMON_ERR_NOMEM，iUtf8Len返回需要的长度，单位字节；
	如果WCHAR缓冲区过小，返回STRCVT_ERR_NOMEM，iUtf8Len返回需要的长度，单位WCHAR。
	*/
protected:
	int Construct();
	int Destruct();

	vector<WCHAR> m_objWstrBuf;
};

#endif
